import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.List;

import javax.xml.rpc.ServiceException;
import se.ardendo.ardjavaapi.DataModelAPI;
import se.ardendo.ardjavaapi.InfoAPI;
import se.ardendo.ardjavaapi.PublicAPI;
import se.ardendo.ardjavaapi.complextype.Item;
import se.ardendo.ardjavaapi.complextype.SearchForm;
import se.ardendo.ardjavaapi.extensions.Payload;
import se.ardendo.ardjavaapi.extensions.exceptions.AJA_SOAPException;

/**
 * Klasse basert på utgitt rammeverk. Søker etter media i ardome på tre forskjellige
 * søkemåter.
 * @author Team Kwikktaim
 *
 */
public class SearchGr14 {

	public static void main(String[] args) throws RemoteException,
			AJA_SOAPException, ServiceException {
		String key;
		InfoAPI ia;

		List<String> searchType = new ArrayList<String>();
		List<String> searchStrings = new ArrayList<String>();
		List<String> searchModes = new ArrayList<String>();

		searchType.add("whole words");
		searchType.add("substring");
		searchType.add("fuzzy");

		searchStrings.add("Christoph er gal");
		searchStrings.add("Christ");
		searchStrings.add("Crhistoph er gal");

		searchModes.add("W"); //Whole words
		searchModes.add("S"); //Substring
		searchModes.add("F"); //Fuzzysøk

		String server = "129.177.28.122";
		String user = "GR14"; //Hardkodet brukernavn og passord
		String pass = "christophelskerdeg";

		PublicAPI pa = new PublicAPI(server); // Litt magi
		key = pa.login(user, pass, "test", "0");
		ia = new InfoAPI(server, user, key);

		// TinyMeta
		String title = "tittel";
		Payload plTiny = new Payload();
		plTiny.setAgl_name("hubitem");
		plTiny.set("title", title);

		SearchForm sf = new SearchForm();
		DataModelAPI dm = new DataModelAPI(server, user, key);

		//Går gjennom og søker med whole words, så substring og så fuzzysøk.
		//Søkesetningen matcher søketypen
		for (int i = 0; i < searchModes.size(); i++) {
			sf.setProfile("");
			sf.setMatch_type(searchModes.get(i)); // Whole words
			String[] ids = ia.search(searchStrings.get(i), plTiny, sf);
			if (ids.length == 0) //melding som blir skrevet ut hvis man ikke fikk treff
				System.out.println("No items found with " + searchType.get(i));
			else {
				Item item = dm.getItemById(ids[0]); // Skriver ut første treff
				System.out.println("Fant item ved hjelp av "
						+ searchType.get(i) + ". Her er første treff:");
				System.out.println("Id: " + item.getItm_id()); //og litt metadata :-)
				System.out.println("Title: " + item.getItm_title());
				System.out.println("Creator: " + item.getItm_creator());
				System.out.println("Media Type: " + item.getItm_type());
				System.out.println("Gro name: " + item.getItm_gro_name());
				System.out.println("Description??: "
						+ item.getItm_description());
			}
		}
	}
}
